from django.shortcuts import render
from django.views import View
from .models import Area
from django import http
from meiduo_mall.utils.response_code import RETCODE
from django.core.cache import cache
from . import constants


class AreaView(View):
    # 查询所有的省信息
    def get(self, request):
        # 接收
        area_id = request.GET.get('area_id')
        # 验证
        if area_id:

            # 如果使用缓存方式，可以直接获取缓存就行，不用做以下
            sub_data = cache.get('area_' + area_id)
            # 可能没有缓存数据，没有数据需要查询
            if sub_data is None:

                # 查询到指定的地区对象，获取子级地址
                try:  # 查询到省级对象
                    area = Area.objects.get(pk=area_id)
                except:  # 如果查询不到，返回错误
                    # print(11111)
                    return http.JsonResponse({
                        'code': RETCODE.PARAMERR,
                        'errmsg': '无效的地区编号',
                    })
                # 查询子级地区，拿到地址后需要获取对应地区的子级地区
                subs = area.subs.all()
                # 转换成JSON格式
                sub_list = []
                for sub in subs:
                    sub_list.append({
                        'id': sub.id,
                        'name': sub.name
                    })

                # 缓存
                sub_data = {
                    'id': area.id,
                    'name': area.name,
                    'subs': sub_list,
                }
                cache.set('area_' + area_id, sub_data, constants.AREA_CACHE_EXPIRES)
                # 响应 返回所属省的市级id，名称

                return http.JsonResponse({
                    'code': RETCODE.OK,
                    'errmsg': 'ok',
                    'sub_data': {
                        'id': area.id,
                        'name': area.name,
                        'subs': sub_list,
                    }
                })

                # 获取缓存，如果有，则不需要进行mysql查询
                # sub_data = cache.get('area_' + area_id)
            return http.JsonResponse({
                'code': RETCODE.OK,
                'errmsg': 'ok',
                'sub_data': sub_data
            })
        else:
            # 读取缓存数据，如果没有，在查询
            province_list = cache.get('province_list')

            if province_list is None:

                # 没有指定地区编号，查询所有的省
                provinces = Area.objects.filter(parent__isnull=True)
                # 转换成json数据
                province_list = []
                for province in provinces:
                    province_list.append({
                        'id': province.id,
                        'name': province.name
                    })

                # 将数据存到redis里，缓存，方便查找
                cache.set('province_list', province_list, constants.AREA_CACHE_EXPIRES)

            # 响应
            # print('>>>>', province_list)
            return http.JsonResponse({
                'code': RETCODE.OK,
                'errmsg': 'ok',
                'province_list': province_list
            })
